﻿/*
 				________________________________COPYRIGHT_______________________________________
				Die Veröffentlichung dieses Objektes ist Illegal und wird strafrechtlich verfolgt
				werden. Sollte es zu einer Veröffentlichung kommen werden wir die Daten des
				Herrausgebers fündig machen und Anzeige erstatten. Desweiteren ist
				auch jeglicher Besitz dieses Objektes Illegal und kann ebenfalls als Grund für
				eine Anzeige verwendet werden.
				Ausnahmen der veröffentlichung und verleihung gelten nur wenn der Grundbesitzer
				diese durchführt.
				Die Uhrheberrechte dieses Objektes liegen der Entwickler Gruppe CyberScripting vor. 
                © 2011.
 */

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.Runtime.InteropServices;

namespace cubeworld.ScreenManager
{
    class CrashScreen : Screen
    {
        Exception ex = null;
        CubeWorldsException ce = null;
        string exs = null;
        KeyboardState oldState = Keyboard.GetState();

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern uint MessageBox(IntPtr hWnd, String text, String caption, uint type);

        public CrashScreen(CubeWorldsException ex)
        {
            this.ce = ex;
            Console.WriteLine(ex.StackTrace);
        }

        public CrashScreen(Exception ex)
        {
            this.ex = ex;
            Console.WriteLine(ex.StackTrace);
        }

        public CrashScreen(string ex)
        {
            this.exs = ex;
        }

        public override void Update(float elapsedTime)
        {
            if (Keyboard.GetState().IsKeyUp(Keys.F10) && oldState.IsKeyDown(Keys.F10))
            {
                MessageBox(new IntPtr(0), ex.StackTrace, "Stack-Trace", 0);
            }
            oldState = Keyboard.GetState();
            base.Update(elapsedTime);
        }

        public override void Render(float elapsedTime)
        {
            if (Keyboard.GetState().IsKeyDown(Keys.Space))
                Data.SetScreen(new TitleScreen());
            if (exs == null && ce == null)
            {
                if (ex.Message.Split('!')[0] == "Safe Mode")
                {
                    Data.spriteBatch.DrawString(Data.errorFont, "CubeWorlds Safe Mode has prevented a crash:" + System.Environment.NewLine + ex.Message.Split('!')[1] + System.Environment.NewLine + "Please report this Bug!", new Vector2(0, 0), Color.Orange);
                }
                else
                {
                    Data.spriteBatch.DrawString(Data.errorFont, "CubeWorlds has been crashed:" + System.Environment.NewLine + ex.Message + System.Environment.NewLine + "Please report this Bug!", new Vector2(0, 0), Color.Red);
                }
            }
            if (ce != null)
            {
                Data.spriteBatch.DrawString(Data.errorFont, "CubeWorlds Safe Mode has prevented a crash:" + System.Environment.NewLine + ce.Message.Split('!')[1] + System.Environment.NewLine + "Please report this Bug!", new Vector2(0, 0), Color.Orange);
            }
            if(this.ex == null)
                Data.spriteBatch.DrawString(Data.errorFont, "CubeWorlds has been crashed:" + System.Environment.NewLine + exs, new Vector2(0, 0), Color.Red);
            base.Render(elapsedTime);
        }
    }
}
